package com.mydemo.game;

import com.mydemo.entity.Save;
import com.mydemo.game.hireStage.HireStage;
import com.mydemo.game.prepareStage.PrepareStage;
import com.mydemo.game.resaultStage.ResultStage;
import com.mydemo.game.runStage.RunStage;
import com.mydemo.print.Print;
import com.mydemo.utils.dataUtils.DataUtil;

import java.util.Scanner;

import static java.lang.Thread.sleep;

public class gameRun {
    public static void gameRun(Save save) {
//                ↑ 必须接受一个Save存档
        if (save == null) {
            return;//接收到null的时候直接结束，因为用户在上一个操作中选择了结束
        } else {
            /**
             * 接收到了正确的存档内容
             * 接下来就应该可以开始游戏了，接下来就是游戏相关的逻辑了
             * 每天分为三个阶段：
             * 准备阶段：
             *  准备阶段可以做的事情：
             *      分配司机和车辆
             * 运营阶段：
             *  运营阶段可以做的事：
             *      无
             * 结算阶段：
             *  结算阶段可以做的事：
             *      租赁新的车
             *      雇佣新的司机
             * */
            boolean flag = true;
            while (flag) {
//                ↑ 循环，只要玩家不选择退出，就会一直进行，设置为在结算阶段后可以选择是否退出游戏
//                ↓ 第一个阶段；准备阶段,如果day等于0，那么先输出说明
                System.out.println("++++++++++++++++++++");
                if (save.getDay() == 0) {
                    Print.prepareStageRead();
                    try {
                        sleep(2000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                } else {
                    save = PrepareStage.prepareStage(save);
                }
//                ↓ 第二个阶段：运营阶段
                if (save.getDay() == 0) {
                    Print.runStageRead();
                    try {
                        sleep(2000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                } else {
                    save = RunStage.runStage(save);
                }
//                ↓ 第三个阶段：结果阶段
                if (save.getDay() == 0) {
                    Print.resultStageRead();
                    try {
                        sleep(2000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                } else {
                    save = ResultStage.resultStage(save);
                }
//                ↓ 第四个阶段：交易阶段
                if (save.getDay() == 0) {
                    Print.hireStageRead();
                    try {
                        sleep(2000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
                    save = HireStage.hireStage(save);
                System.out.println("下一天？（0退出）");
                Scanner scanner = new Scanner(System.in);
                int choose = scanner.nextInt();
                DataUtil<Save, ?> saveDataUtil = new DataUtil<>(Save.class, "Save");
                int day = save.getDay();
                day++;
                save.setDay(day);
                saveDataUtil.update().updateObject(save);
                if (choose == 0) {
                    flag = false;
                }
            }
        }
    }
}
